package com.zmn.plat.services.interfaces.category;

import java.util.List;

import com.zmn.plat.model.entity.category.BaseCategoryAttribute;
import com.zmn.plat.model.entity.category.BaseCategoryAttributeQuery;
import com.zmn.plat.model.vo.category.BaseCategoryAttrVO;

/**
 * @author duanzuocai
 * @version v1.0
 * @类说明：产品分类属性定义
 * @since 2018/10/19 14:21
 */
public interface BaseCategoryAttributeService {

    /**
     * ID 查询
     *
     * @param id
     * @return
     */
    BaseCategoryAttribute findByKey(Integer id);

    /**
     * 子类属性集合
     *
     * @param categId
     *            分类名称
     * @param attrName
     *            属性名
     * @return
     */
    List<BaseCategoryAttribute> listAttributeFromChildByCategIdAndAttrName(Integer categId, Integer channelId, String attrName);

    /**
     * 统计分类属性集合
     *
     * @param categId
     *            分类名称
     * @param attrName
     *            属性名
     * @return
     */
    List<BaseCategoryAttribute> listAttributeByCategIdAndAttrName(Integer categId, Integer channelId, String attrName);

    /**
     * 统计子类属性个数
     *
     * @param categId
     *            分类名称
     * @param attrName
     *            属性名
     * @return
     */
    int countAttributeFromChild(Integer categId, String attrName);

    /**
     * 统计分类属性个数
     *
     * @param categId
     *            分类名称
     * @param attrName
     *            属性名
     * @return
     */
    int countAttribute(Integer categId, String attrName);

    /**
     * 名称查询
     *
     * @param name
     *            名称
     * @param categId
     *            分类ID
     * @return
     */
    BaseCategoryAttribute findByName(String name, Integer categId);

    /**
     * 分页搜索
     *
     * @param query
     *            条件
     * @return
     */
    List<BaseCategoryAttrVO> listPageByQuery(BaseCategoryAttributeQuery query);

    /**
     * 查询属性
     *
     * @param categoryId
     *            分类ID
     * @param channelId
     *            渠道ID
     * @return
     */
    List<BaseCategoryAttribute> listByCategoryId(Integer categoryId,Integer channelId);

    /**
     * 搜索属性
     *
     * @param query
     *            条件
     * @return
     */
    List<BaseCategoryAttribute> listByQuery(BaseCategoryAttributeQuery query);

    /**
     * 属性统计
     *
     * @param query
     *            条件
     * @return
     */
    Integer countByQuery(BaseCategoryAttributeQuery query);

    /**
     * 更新
     *
     * @param attribute
     *            对象
     * @return
     */
    Integer updateByKey(BaseCategoryAttribute attribute);

    /**
     * 批量更新属性状态
     *
     * @param arrayIds
     *            属性ID
     * @param status
     *            状态
     * @param updater
     *            操作人
     */
    int updateStatusBatch(List<Integer> arrayIds, int status, String updater);

    /**
     * 通过主键更新排序
     *
     * @param attrId
     *            属性ID
     * @param sort
     *            排序
     * @param updater
     *            操作人
     */
    int updateSortKey(Integer attrId, Integer sort, String updater);

    /**
     * 添加
     *
     * @param attribute
     *            属性
     * @return
     */
    Integer insert(BaseCategoryAttribute attribute);

    /**
     * 删除
     *
     * @param id
     *            id
     * @return
     */
    Integer delete(int id);

}
